﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Controller;

namespace GUI
{
    public partial class Arbejdskort : P_DesignParentForm
    {
        public Arbejdskort(int i)
        {
            InitializeComponent();
            VisArbejdsKort(i);
        }

        private void Arbejdskort_Load(object sender, EventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();

            Kundelabel.Text = v.Mkatalog.AktivMekaniker.ArbejdesPaa.AktuelKunde.ToString();
            ScooterLabel.Text = v.Mkatalog.AktivMekaniker.ArbejdesPaa.KundesScooter.ToString();
            AntKmtextBox.Text = v.Mkatalog.AktivMekaniker.ArbejdesPaa.KundesScooter.AntKm.ToString();
            this.toolStripTextBox1.Text = "Arbejdskort for Ordre nr: " + v.Mkatalog.AktivMekaniker.ArbejdesPaa.Onr;
        }

        private void VisArbejdsKort(int i)
        {
            Vaerksted v = Vaerksted.GetInstance();
            v.VKatalog = new SBS.VareKatalog();
            v.Mkatalog.AktivMekaniker.ArbejdesPaa = v.Mkatalog.AktivMekaniker.ArbejdsOversigt[i];
            OpdaterGridView();

            
        }

        private void OpdaterGridView()
        {
            Vaerksted v = Vaerksted.GetInstance();
            var liste = from l in v.Mkatalog.AktivMekaniker.ArbejdesPaa.OrdreLinier select new { Anta = l.Antal, Beskrivelse = l.VareIOrdreLinien.VareNavn, Tidsforbrug = l.VareIOrdreLinien.Tid, Udført = l.Udfort };
            dataGridView1.DataSource = liste.ToList();

            
        }

        private void OpgaveUdfort(object sender, DataGridViewCellMouseEventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();

            if (v.Mkatalog.AktivMekaniker.ArbejdesPaa.OrdreLinier[dataGridView1.CurrentRow.Index].Udfort)
                v.Mkatalog.AktivMekaniker.ArbejdesPaa.OrdreLinier[dataGridView1.CurrentRow.Index].Udfort = false;
            else
            {
                v.Mkatalog.AktivMekaniker.ArbejdesPaa.OrdreLinier[dataGridView1.CurrentRow.Index].UdfortDatoTid = DateTime.Now;
                v.Mkatalog.AktivMekaniker.ArbejdesPaa.OrdreLinier[dataGridView1.CurrentRow.Index].Udfort = true;
            }
            OpdaterGridView();

        }

        private bool CheckForFaerdig()
        {
            Vaerksted v = Vaerksted.GetInstance();


            bool faerdig = false;
            for (int i = 0; i < v.Mkatalog.AktivMekaniker.ArbejdesPaa.OrdreLinier.Count; i++)
            {
                if (v.Mkatalog.AktivMekaniker.ArbejdesPaa.OrdreLinier[i].Udfort)
                    faerdig = true;
                else
                {
                    faerdig = false;
                    break;
                }

            }
            return faerdig;

            

        }

        private void AfslutArbejdsKort(bool Udfoert)
        {
            Vaerksted v = Vaerksted.GetInstance();
            v.Mkatalog.AktivMekaniker.ArbejdesPaa.Udfort = Udfoert;
            v.Mkatalog.AktivMekaniker.ArbejdesPaa.KundesScooter.AntKm = double.Parse(AntKmtextBox.Text);
            if (v.RegistrerArbejde())
                Close();
            else
                MessageBox.Show("Det var ikke muligt at afslutte ordren korrekt");
            
                

        }

        private void HentVareKatalogButton_Click(object sender, EventArgs e)
        {
            VareKatalog vk = new VareKatalog();
            vk.ShowDialog();
        }

        private void TilfojOrdreLinieButton_Click(object sender, EventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();
            if (SBS.Valider.KunDecimalTal(VareAntalTextBox.Text) && SBS.Valider.KunDecimalTal(VareNummerTextBox.Text) && SBS.Valider.KunDecimalTal(VarePrisTextBox.Text))
            {
                if(double.Parse(VarePrisTextBox.Text) > 400)
                {
                    DialogResult dl = MessageBox.Show("Varen er over 400 kroner, har du orienteret kunden om dette?","Tilføj vare",MessageBoxButtons.YesNo);

                    if(dl == DialogResult.Yes)
                    {
                        v.Mkatalog.AktivMekaniker.ArbejdesPaa.OrdreLinier.Add(new SBS.OrdreLinie(v.VKatalog.Varer[int.Parse(VareNummerTextBox.Text)], 0, int.Parse(VareAntalTextBox.Text), double.Parse(VarePrisTextBox.Text),false));

                    }
                }

                else
                {

                v.Mkatalog.AktivMekaniker.ArbejdesPaa.OrdreLinier.Add(new SBS.OrdreLinie(v.VKatalog.Varer[int.Parse(VareNummerTextBox.Text)], 0, int.Parse(VareAntalTextBox.Text), double.Parse(VarePrisTextBox.Text),false));
                }

                OpdaterGridView();
                VarePrisTextBox.Clear();
                VareNavnTextBox.Clear();
                VareNummerTextBox.Clear();
                VareAntalTextBox.Text = "1";
            }
            else
                MessageBox.Show("Der er en fejl i varelinien, og den kan derfor ikke tilføjes ordren");
        }

        private void HentVare(object sender, EventArgs e)
        {
            if (SBS.Valider.KunHelTal(VareNummerTextBox.Text))
            {
                Vaerksted v = Vaerksted.GetInstance();
                if (v.VKatalog.Varer.ContainsKey(Convert.ToInt32(VareNummerTextBox.Text)))
                {
                    VareNavnTextBox.Text = v.VKatalog.Varer[Convert.ToInt32(VareNummerTextBox.Text)].VareNavn;
                    VarePrisTextBox.Text = v.VKatalog.Varer[Convert.ToInt32(VareNummerTextBox.Text)].VarePris.ToString();
                }
            }
            else
                VareNavnTextBox.Text = "Ikke gyldigt varenummer";
        }

        private void AfslutButton_Click(object sender, EventArgs e)
        {
            Vaerksted v = Vaerksted.GetInstance();
            if (v.Mkatalog.AktivMekaniker.ArbejdesPaa.KundesScooter.AntKm != double.Parse(AntKmtextBox.Text))
            {
                if (CheckForFaerdig())
                    AfslutArbejdsKort(true);
                else
                {
                    DialogResult dl = MessageBox.Show("Alle arbejdsopgaver er ikke udførte, ønsker du at gemme arbejdskortet aligevel? \nBemærk: Arbejdskortet vil fortsat vises på din arbejdsoversigt indtil alle opgaver er udført", "Arbejdskort ikke færdigt", MessageBoxButtons.YesNo);
                    if (dl == DialogResult.Yes)
                        AfslutArbejdsKort(false);
                    
                }
            }
            else
            {
                MessageBox.Show("Du mangler at opdatere kilometer stand");
            }
        }

       
    }
}
